-- 参数：
-- 优惠卷id
local voucherId = ARGV[1]
-- 用户是否下过单（用户id）
local userId = ARGV[2]
-- 订单id
--local orderId = ARGV[3]

-- redis中要用到的key：
-- 库存key
local stockKey = 'seckill:stock:' .. voucherId  -- .. 拼接
-- 订单key (value为买过此券的用户id的set集合)
local orderKey = 'seckill:order:' .. voucherId


-- 脚本
-- 判断库存
if(tonumber(redis.call('get',stockKey)) <= 0) then
    -- 库存不足，返回1
    return 1
end

-- 判断用户是否下过单
if(redis.call('sismember',orderKey,userId) == 1) then
    -- 存在，说明重复下单
    return 2
end

-- 有库存且当前用户第一次下单
-- 扣减redis中的库存
redis.call('incrby',stockKey,-1)
-- 保存用户到集合
redis.call('sadd',orderKey,userId)
-- 发送消息到stream消息队列： xadd stream_name *（*代表自动生成消息id） k1 v1 k2 v2 ...
--redis.call('xadd','stream.orders','*','userId',userId,'voucherId',voucherId,'id',orderId)
return 0